<template>
  <a-spin :spinning="confirmLoading">
    <j-form-container :disabled="formDisabled">
      <a-form-model ref="form" :model="model" slot="detail" :rules="validatorRules">
        <a-row>
          <a-col :span="24">
            <a-form-model-item label="租户名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="name">
              <a-input v-model="model.name" placeholder="请输入租户名称"></a-input>
            </a-form-model-item>
          </a-col>
          
          <a-col :span="24">
            <a-form-model-item label="租户编号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="id">
              <a-input-number style="width: 100%" :min="1" v-model="model.id" placeholder="系统自动生成" disabled></a-input-number>
            </a-form-model-item>
          </a-col>
          
          <a-col :span="24">
            <a-form-model-item label="开始时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="beginDate">
              <j-date placeholder="请选择开始时间" v-model="model.beginDate" :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" style="width: 100%"/>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="到期时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="endDate">
              <j-date placeholder="请选择到期时间" v-model="model.endDate" :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" style="width: 100%"/>
            </a-form-model-item>
          </a-col>
          
          <a-col :span="24">
            <a-form-model-item label="状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-radio-group name="tenantStatus" v-model="model.status">
                <a-radio :value="1">正常</a-radio>
                <a-radio :value="0">冻结</a-radio>
              </a-radio-group>
            </a-form-model-item>
          </a-col>
          <a-col v-if="showFlowSubmitButton" :span="24" style="text-align: center">
            <a-button @click="submitForm">提 交</a-button>
          </a-col>
        </a-row>
      </a-form-model>
    </j-form-container>
  </a-spin>
</template>

<script>
  import { httpAction, getAction } from '@/api/manage'
  import { validateDuplicateValue } from '@/utils/util'
  import JFormContainer from '@/components/jeecg/JFormContainer'
  import JDate from '@/components/jeecg/JDate'
  import JDictSelectTag from "@/components/dict/JDictSelectTag"
  
  export default {
    name: "TenantForm",
    components: {
      JFormContainer,
      JDate,
      JDictSelectTag,
    },
    props: {
      formData: {
        type: Object,
        default: ()=>{},
        required: false
      },
      normal: {
        type: Boolean,
        default: false,
        required: false
      },
      disabled: {
        type: Boolean,
        default: false,
        required: false
      }
    },
    data () {
      return {
        model: {
          id: undefined,
          name: '',
          status: 1,
          beginDate: null,
          endDate: null
        },
        id: '',
        labelCol: {
          xs: { span: 24 },
          sm: { span: 5 },
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 },
        },
        confirmLoading: false,
        validatorRules: {
          name: [
            { required: true, message: '请输入租户名称!', trigger: 'blur' }
          ],
          id: [
            { required: true, message: '租户编号不能为空!', trigger: 'change' }
          ],
          beginDate: [
            { required: false, message: '请选择开始时间!', trigger: 'change' }
          ],
          endDate: [
            { required: false, message: '请选择到期时间!', trigger: 'change' },
            { validator: this.validateEndDate, trigger: 'change' }
          ]
        },
        url: {
          add: "/sys/tenant/add",
          edit: "/sys/tenant/edit",
          queryById: "/sys/tenant/queryById",
          checkIdExist: "/sys/tenant/checkIdExist"
        }
      }
    },
    computed: {
      formDisabled(){
        if(this.normal===false){
          if(this.formData.disabled===false){
            return false
          }else{
            return true
          }
        }
        return this.disabled
      },
      showFlowSubmitButton(){
        if(this.normal===false){
          if(this.formData.disabled===false){
            return true
          }else{
            return false
          }
        }else{
          return false
        }
      }
    },
    created () {
      this.showFlowData();
      // 如果是新增模式，获取下一个可用的租户编号
      if (!this.id) {
        this.getNextTenantId();
      }
    },
    methods: {
      // 获取下一个可用的租户编号
      getNextTenantId() {
        getAction('/sys/tenant/getNextTenantId').then(res => {
          if (res.success) {
            this.model.id = res.result;
          } else {
            this.$message.warning(res.message || '获取租户编号失败');
          }
        }).catch(err => {
          console.log('获取租户编号出错', err);
          this.$message.error('获取租户编号出错');
        });
      },
      // 校验到期时间
      validateEndDate(rule, value, callback) {
        if (value && this.model.beginDate && new Date(value) < new Date(this.model.beginDate)) {
          callback(new Error('到期时间不能早于开始时间!'));
        } else {
          callback();
        }
      },
      show (record) {
        this.model = record ? Object.assign({}, record) : this.model;
        this.id = record ? record.id : '';
        this.visible = true;
        
        // 如果是新增模式，获取下一个可用的租户编号
        if (!this.id) {
          this.getNextTenantId();
        }
      },
      showFlowData(){
        if(this.normal === false){
          let params = {id:this.formData.dataId};
          getAction(this.url.queryById,params).then((res)=>{
            if(res.success){
              this.edit (res.result);
            }
          });
        }
      },
      edit(record) {
        this.model = Object.assign({}, record);
        // 确保id被正确设置
        if (record && record.id !== undefined) {
          this.id = record.id;
          // 如果id是字符串，转换为数字
          if (typeof this.model.id === 'string') {
            this.model.id = Number(this.model.id);
          }
        }
      },
      submitForm () {
        const that = this;
        // 触发表单验证
        that.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = true;
            let httpurl = '';
            let method = '';
            
            // 处理表单数据
            const formData = Object.assign({}, this.model);
            // 确保租户编号是数字类型
            if (formData.id !== undefined && formData.id !== null) {
              formData.id = Number(formData.id);
            }
            
            if(!this.id){
              httpurl+=this.url.add;
              method = 'post';
            }else{
              httpurl+=this.url.edit;
              method = 'put';
            }
            
            console.log('提交的表单数据:', formData);
            
            httpAction(httpurl, formData, method).then((res)=>{
              if(res.success){
                that.$message.success(res.message || '操作成功');
                that.$emit('ok');
              }else{
                that.$message.warning(res.message || '操作失败');
              }
            }).catch(err => {
              console.log('表单提交出错:', err);
              that.$message.error('表单提交出错');
            }).finally(() => {
              that.confirmLoading = false;
            })
          }
        })
      },
      popupCallback(row){
        this.model = Object.assign(this.model, row);
      },
    }
  }
</script>
